﻿using System;
using System.Data;
using System.Windows.Forms;

namespace SalesVMT
{
    public class UISetting
    {
        #region Use this project

        public static void LoadCustomerType(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = CustomerTypeDB.GetAll().Tables[0];

                //DataRow dr = dt.NewRow();
                //dr["CustomerType_ID"] = 1000;
                //dr["CustomerType_Name"] = "...Tạo mới...";
                //dt.Rows.InsertAt(dr, dt.Rows.Count + 1);

                box.DisplayMember = "CustomerType_Name";
                box.ValueMember = "CustomerType_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu loại khách hàng!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadCustomerType(ref ToolStripComboBox box)
        {
            try
            {
                box.ComboBox.DataSource = null;
                //CustomerTypeDB _db = new CustomerTypeDB();
                DataTable dt = CustomerTypeDB.GetAll().Tables[0];
                DataRow dr = dt.NewRow();
                dr["CustomerType_ID"] = 0;
                dr["CustomerType_Name"] = "...Tất cả...";
                dt.Rows.InsertAt(dr, 0);

                box.ComboBox.DisplayMember = "CustomerType_Name";
                box.ComboBox.ValueMember = "CustomerType_ID";
                box.ComboBox.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu loại khách hàng!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadOrigin(ref ToolStripComboBox box)
        {
            try
            {
                box.ComboBox.DataSource = null;
                DataTable dt = OriginDB.GetAll().Tables[0];

                DataRow dr = dt.NewRow();
                dr["Origin_ID"] = 0;
                dr["Origin_Name"] = "...Tất cả...";
                dt.Rows.InsertAt(dr, 0);

                box.ComboBox.DisplayMember = "Origin_Name";
                box.ComboBox.ValueMember = "Origin_ID";
                box.ComboBox.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nơi xuất xứ!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadOrigin(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = OriginDB.GetAll().Tables[0];

                box.DisplayMember = "Origin_Name";
                box.ValueMember = "Origin_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nơi xuất xứ!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadCalculationUnit(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = CalculationUnitDB.GetAll().Tables[0];

                box.DisplayMember = "CalculationUnit_Name";
                box.ValueMember = "CalculationUnit_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu đơn vị tính!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadCalculationUnit(ref ToolStripComboBox box)
        {
            try
            {
                box.ComboBox.DataSource = null;
                DataTable dt = CalculationUnitDB.GetAll().Tables[0];
                DataRow dr = dt.NewRow();
                dr["CalculationUnit_ID"] = 0;
                dr["CalculationUnit_Name"] = "...Tất cả...";
                dt.Rows.InsertAt(dr, 0);
                box.ComboBox.DisplayMember = "CalculationUnit_Name";
                box.ComboBox.ValueMember = "CalculationUnit_ID";
                box.ComboBox.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu đơn vị tính!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadProviderFromReceipt(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = ProviderDB.GetAllFromReceipt().Tables[0];

                box.DisplayMember = "Provider_Name";
                box.ValueMember = "Provider_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nhà cc!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadProviderFromReceipt(ref ToolStripComboBox box)
        {
            try
            {
                box.ComboBox.DataSource = null;
                DataTable dt = ProviderDB.GetAllFromReceipt().Tables[0];

                box.ComboBox.DisplayMember = "Provider_Name";
                box.ComboBox.ValueMember = "Provider_ID";
                box.ComboBox.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nhà cc!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadProviderFromReceiptForReport(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = ProviderDB.GetAllFromReceipt().Tables[0];
                DataRow dr = dt.NewRow();
                dr["Provider_ID"] = 0;
                dr["Provider_Name"] = "...Tất cả...";
                dt.Rows.InsertAt(dr, 0);
                box.DisplayMember = "Provider_Name";
                box.ValueMember = "Provider_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nhà cc!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadCustomerFromShipment(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = CustomerDB.GetAllFromShipment().Tables[0];

                box.DisplayMember = "Customer_Name";
                box.ValueMember = "Customer_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nhà cc!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadCustomerFromShipment(ref ToolStripComboBox box)
        {
            try
            {
                box.ComboBox.DataSource = null;
                DataTable dt = CustomerDB.GetAllFromShipment().Tables[0];

                box.ComboBox.DisplayMember = "Customer_Name";
                box.ComboBox.ValueMember = "Customer_ID";
                box.ComboBox.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nhà cc!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static void LoadCustomerFromShipmentForReport(ref ComboBox box)
        {
            try
            {
                box.DataSource = null;
                DataTable dt = CustomerDB.GetAllFromShipment().Tables[0];
                DataRow dr = dt.NewRow();
                dr["Customer_ID"] = 0;
                dr["Customer_Name"] = "...Tất cả...";
                dt.Rows.InsertAt(dr, 0);
                box.DisplayMember = "Customer_Name";
                box.ValueMember = "Customer_ID";
                box.DataSource = dt;
            }
            catch (Exception)
            {
                Program.taskbarNotifier.Show(Message.Error, "Chưa có dữ liệu nhà cc!", UIParamater.TimeToShow, UIParamater.TimeToStay, UIParamater.TimeToHide);
            }
        }
        public static string AutoFillCustomerCode()
        {
            string retVal = CustomerDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(8)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "KH" + retVal;
        }
        public static string AutoFillItemCode()
        {
            string retVal = ItemDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(8)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "MH" + retVal;
        }
        public static string AutoFillProviderCode()
        {
            string retVal = ProviderDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(9)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "NCC" + retVal;
        }
        public static string AutoFillOrderCode()
        {
            string retVal = ProviderDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(8)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "DH" + retVal;
        }
        public static string AutoFillReceiptCode()
        {
            string retVal = ReceiptDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(9)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "PNK" + retVal;
        }
        public static string AutoFillShipmentCode()
        {
            string retVal = ShipmentDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(9)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "PXK" + retVal;
        }
        public static string AutoFillSpendCode()
        {
            string retVal = SpendDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(9)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "PC" + retVal;
        }
        public static string AutoFillIncomeCode()
        {
            string retVal = IncomeDB.GetMaxCode();
            if (retVal.Length > 0)
            {
                int number = Convert.ToInt32(retVal.Substring(9)) + 1;
                retVal = DateTime.Today.ToString("yyMMdd") + number.ToString("0000");
            }
            else
                retVal = DateTime.Today.ToString("yyMMdd") + "0001";
            return "PT" + retVal;
        }

        #endregion

        #region Use General
        public static string GetKeyWord(string KeyWord)
        {
            string _keyword = "";
            if (KeyWord.Contains("'"))
                _keyword = KeyWord.Replace("'", "''");
            else
                _keyword = KeyWord;
            return _keyword;
        }
        public static Decimal GetDecimalNo(string strDecimalNo)
        {
            Decimal outDec;
            if (Decimal.TryParse(strDecimalNo, out outDec) || outDec > 0)
                return outDec;
            else
                outDec = 0;
            return outDec;
        }
        public static DateTime GetDate(string strDate)
        {
            DateTime outDate;
            if (DateTime.TryParseExact(strDate, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out outDate))
            {
                return outDate;
            }
            DateTime.TryParseExact("01/01/0001", "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out outDate);
            return outDate;
        }
        /// <summary>
        /// Tính tuổi
        /// </summary>
        /// <param name="birthDate">Ngày sinh</param>
        /// <returns>Age</returns>
        public static int GetAge(DateTime birthDate)
        {
            DateTime n = DateTime.Now; // To avoid a race condition around midnight
            int age = n.Year - birthDate.Year;

            if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
                age--;

            return age;
        }
        /// <summary>
        /// Hàm này để tính số tháng
        /// </summary>
        /// <param name="t1"> Tháng bắt đầu</param>
        /// <param name="t2"> Tháng kết thúc</param>
        /// <returns>Month Number</returns>
        public static int GetMonth(DateTime t1, DateTime t2)
        {
            //Note: t1 <= t2
            int month = (t2.Year - t1.Year) * 12;

            if (t2.Month < t1.Month)
                month -= (t1.Month - t2.Month);
            if (t2.Month > t1.Month)
                month += (t2.Month - t1.Month);
            return month;
        }
        public static int GetDay(DateTime t1, DateTime t2)
        {
            int days;
            //Note: t1 <= t2
            TimeSpan ts;
            ts = t2 - t1;
            days = Convert.ToInt32(ts.TotalDays);
            return days;
        }
        public static void LoadMonths(ref ComboBox box)
        {
            DataTable dt = new DataTable();
            DataColumn dcol = null;
            dcol = new DataColumn("MonthID", typeof(int));
            dt.Columns.Add(dcol);
            dcol = new DataColumn("MonthName", typeof(string));
            dt.Columns.Add(dcol);

            for (int i = 1; i <= 12; i++)
            {
                DataRow dr = dt.NewRow();
                dr["MonthID"] = i;
                if (i < 10)
                    dr["MonthName"] = "0" + i.ToString();
                else
                    dr["MonthName"] = i;
                dt.Rows.InsertAt(dr, i);
            }

            box.ValueMember = "MonthID";
            box.DisplayMember = "MonthName";
            box.DataSource = dt;
        }
        public static void LoadMonths(ref ToolStripComboBox box)
        {
            DataTable dt = new DataTable();
            DataColumn dcol = null;
            dcol = new DataColumn("MonthID", typeof(int));
            dt.Columns.Add(dcol);
            dcol = new DataColumn("MonthName", typeof(string));
            dt.Columns.Add(dcol);

            for (int i = 1; i <= 12; i++)
            {
                DataRow dr = dt.NewRow();
                dr["MonthID"] = i;
                if (i < 10)
                    dr["MonthName"] = "0" + i.ToString();
                else
                    dr["MonthName"] = i;
                dt.Rows.InsertAt(dr, i);
            }

            box.ComboBox.ValueMember = "MonthID";
            box.ComboBox.DisplayMember = "MonthName";
            box.ComboBox.DataSource = dt;
        }
        public static void LoadDays(ref ComboBox box)
        {
            DataTable dt = new DataTable();
            DataColumn dcol = null;
            dcol = new DataColumn("DayID", typeof(int));
            dt.Columns.Add(dcol);
            dcol = new DataColumn("DayName", typeof(string));
            dt.Columns.Add(dcol);

            for (int i = 1; i <= 31; i++)
            {
                DataRow dr = dt.NewRow();
                dr["DayID"] = i;
                if (i < 10)
                    dr["DayName"] = "0" + i.ToString();
                else
                    dr["DayName"] = i;
                dt.Rows.InsertAt(dr, i);
            }

            box.ValueMember = "DayID";
            box.DisplayMember = "DayName";
            box.DataSource = dt;
        }
        public static void LoadDays(ref ToolStripComboBox box)
        {
            DataTable dt = new DataTable();
            DataColumn dcol = null;
            dcol = new DataColumn("DayID", typeof(int));
            dt.Columns.Add(dcol);
            dcol = new DataColumn("DayName", typeof(string));
            dt.Columns.Add(dcol);

            for (int i = 1; i <= 31; i++)
            {
                DataRow dr = dt.NewRow();
                dr["DayID"] = i;
                if (i < 10)
                    dr["DayName"] = "0" + i.ToString();
                else
                    dr["DayName"] = i;
                dt.Rows.InsertAt(dr, i);
            }

            box.ComboBox.ValueMember = "DayID";
            box.ComboBox.DisplayMember = "DayName";
            box.ComboBox.DataSource = dt;
        }
        public static void LoadYears(ref ComboBox box)
        {
            DataTable dt = new DataTable();
            DataColumn dcol = null;
            dcol = new DataColumn("YearID", typeof(int));
            dt.Columns.Add(dcol);
            dcol = new DataColumn("YearName", typeof(string));
            dt.Columns.Add(dcol);
            for (int i = 2000; i <= 2020; i++)
            {
                DataRow dr = dt.NewRow();
                dr["YearID"] = i;
                dr["YearName"] = i;
                dt.Rows.InsertAt(dr, i);
            }
            box.ValueMember = "YearID";
            box.DisplayMember = "YearName";
            box.DataSource = dt;
        }

        public static void LoadYears(ref ToolStripComboBox box)
        {
            DataTable dt = new DataTable();
            DataColumn dcol = null;
            dcol = new DataColumn("YearID", typeof(int));
            dt.Columns.Add(dcol);
            dcol = new DataColumn("YearName", typeof(string));
            dt.Columns.Add(dcol);

            for (int i = 2000; i <= 2020; i++)
            {
                DataRow dr = dt.NewRow();
                dr["YearID"] = i;
                dr["YearName"] = i;
                dt.Rows.InsertAt(dr, i);
            }

            box.ComboBox.ValueMember = "YearID";
            box.ComboBox.DisplayMember = "YearName";
            box.ComboBox.DataSource = dt;
        }
        
        public static void AddColumn(ref DataGridView dgv, string ColumnName, string ColumnHeader,
                string Alignment, int Width, bool IsVisible, bool IsReadOnly)
        {

            DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

            if (Alignment == "L" || Alignment == "C" || Alignment == "R" || Alignment == "")
            {
                switch (Alignment)
                {
                    case "L":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        break;
                    case "C":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                        break;
                    case "R":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                        break;
                    case "":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        break;
                }
            }
            else
                col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            col.Name = ColumnName;
            col.HeaderText = ColumnHeader;
            col.Width = Width;
            col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgv.Columns.Add(col);
            col.Visible = IsVisible;
            col.ReadOnly = IsReadOnly;
        }
        public static void AddColumn(ref dgvSelectedRows dgv, string ColumnName, string ColumnHeader,
                string Alignment, int Width, bool IsVisible, bool IsReadOnly)
        {
            DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
            if (Alignment == "L" || Alignment == "C" || Alignment == "R" || Alignment == "")
            {
                switch (Alignment)
                {
                    case "L":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        break;
                    case "C":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                        break;
                    case "R":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                        break;
                    case "":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        break;
                }
            }
            else
                col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;


            col.Name = ColumnName;
            col.HeaderText = ColumnHeader;
            col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
            col.Width = Width;
            dgv.Columns.Add(col);
            col.Visible = IsVisible;
            col.ReadOnly = IsReadOnly;

            dgv.BackgroundColor = System.Drawing.Color.White;
            dgv.BorderStyle = System.Windows.Forms.BorderStyle.None;
            dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
        }
        public static void AddColumn(ref dgvSelectedCells dgv, string ColumnName, string ColumnHeader,
                string Alignment, int Width, bool IsVisible, bool IsReadOnly)
        {
            DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
            if (Alignment == "L" || Alignment == "C" || Alignment == "R" || Alignment == "")
            {
                switch (Alignment)
                {
                    case "L":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        break;
                    case "C":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                        break;
                    case "R":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                        break;
                    case "":
                        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
                        break;
                }
            }
            else
                col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;


            col.Name = ColumnName;
            col.HeaderText = ColumnHeader;
            col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
            col.Width = Width;
            dgv.Columns.Add(col);
            col.Visible = IsVisible;
            col.ReadOnly = IsReadOnly;
        }
        #endregion
    }
    public class clsNumberToString
    {
        public static string Group32StrX(string num)
        {
            string[] No = { "không ", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín " };
            string kq, tram, chuc, donvi;
            // Trăm
            if (num.Substring(0, 1) == "0")
            { tram = ""; }
            else
            { tram = No[Convert.ToByte(num.Substring(0, 1))] + "trăm "; }
            // Chục
            switch (num.Substring(1, 1))
            {
                case "0": if (num.Substring(2, 1) != "0" && num.Substring(0, 1) != "0")
                    {
                        chuc = "linh ";
                    }
                    else { chuc = ""; }; break;
                case "1": chuc = "mười "; break;
                default:
                    chuc = No[Convert.ToByte(num.Substring(1, 1))] + "mươi "; break;
            }
            // Đơn vị
            switch (num.Substring(2, 1))
            {
                case "0": donvi = ""; break;
                case "1": if ((num.Substring(1, 1) == "0") || (num.Substring(1, 1) == "1"))
                    {
                        donvi = "một ";
                    }
                    else
                    {
                        donvi = "mốt ";
                    }; break;
                case "5":
                    if (num.Substring(1, 1) != "0")
                    {
                        donvi = "lăm ";
                    }
                    else
                    {
                        donvi = "năm ";
                    }; break;
                default:
                    donvi = No[Convert.ToByte(num.Substring(2, 1))]; break;
            }
            kq = tram + chuc + donvi;
            return kq;
        }
        public static string IntNum2Str(string num)
        {
            string[] Cap = { "", "nghìn ", "triệu ", "tỷ ", "nghìn tỷ ", "triệu tỷ ", "tỷ tỷ ", "nghìn tỷ tỷ " };
            string kq = "", str = num, g3, kqtg;
            int caps = 0;
            while (str.Length > 3)
            {
                g3 = str.Substring(str.Length - 3, 3);
                str = str.Substring(0, str.Length - 3);
                if (g3 != "000")
                { kqtg = Group32StrX(g3) + Cap[Convert.ToByte(caps)]; }
                else { kqtg = ""; }
                kq = kqtg + kq;
                caps++;
            }
            //Chuẩn bị trước khi sử dụng hàm Group32Str1
            while (str.Length < 3)
            { str = "0" + str; }

            if ((str == "000") && (num.Length <= 3))
            { kqtg = "không "; }
            else
            { kqtg = Group32StrX(str) + Cap[Convert.ToByte(caps)]; }
            kq = kqtg + kq;
            return kq;
        }
        public static string FracNum2Str(string num)
        {
            string[] No = { "không ", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín " };
            string kq = "";
            for (int i = 0; i < num.Length; i++)
            {
                kq += No[Convert.ToByte(num.Substring(i, 1))] + " ";
            }
            return kq;
        }
        public static string No2Str(string num)
        {
            string intstr, fracstr, am;
            // Xử lý khi là số âm
            if (num.Substring(0, 1) == "-")
            {
                am = "âm ";
                num = num.Replace("-", "");
            }
            else { am = ""; }

            string[] str = num.Split('.');
            // Số quá lớn nhiều hơn 27 chữ số
            if (str[0].Length > 28)
                throw new Exception("Số lớn quá không hiển thị được! ");

            string s;
            // Xử lý phần số, nếu là có số thập phân hoặc không
            if (str.Length == 2)
            {
                intstr = IntNum2Str(str[0]);
                if (str[1].Length <= 2)
                {
                    if (str[1].Substring(0, 1) == "0")
                    {
                        fracstr = FracNum2Str(str[1]);
                    }
                    else
                    {
                        fracstr = IntNum2Str(str[1]);
                    }
                }
                else
                {
                    fracstr = FracNum2Str(str[1]);
                }
                s = (intstr + "phảy " + fracstr);
            }
            else
            {
                intstr = IntNum2Str(str[0]);
                s = intstr;
            }
            s = am + s;
            string chuhoa = s.Substring(0, 1).ToUpper();
            s = s.Substring(1, s.Length - 1);
            return (chuhoa + s);
        }
        public static string NumNormalize(string num)
        {
            char ThousandSpace = ',';
            char PointScape = '.';
            string[] s = num.Split('.');
            string g3, str = "";
            while (s[0].Length > 3)
            {
                g3 = s[0].Substring(s[0].Length - 3, 3);
                s[0] = s[0].Substring(0, s[0].Length - 3);
                str = ThousandSpace + g3 + str;
            }
            str = s[0] + str;
            if (s.Length == 2)
            {
                str = (str + PointScape + s[1]);
            }
            return str.Replace("-,", "-");
        }
        public static string NumberToString(string no)
        {
            // xử lý trường hợp dáu phảy thay cho dấu chấm
            if (no.IndexOf(",", 0, 1) != 0) { no = no.Replace(",", "."); }
            // Xoá các ký tự trắng ở đầu và cuối
            no = no.Trim();
            // Xử lý khi nó là chữ chứ không phải là số
            if (no == "0") return "Không";
            if (no == "") return "Không";
            double val;
            try
            {
                val = Convert.ToDouble(no);
            }
            catch
            {
                throw new Exception("Đây không phải là số");

            }
            // tiêu diệt các số không
            while (no.Substring(0, 1) == "0")
            {
                no = no.Substring(1, no.Length - 1);
            }

            if (no.IndexOf(".", 0, 1) != -1)
            {
                while (no.Substring(no.Length - 1, 1) == "0")
                {
                    no = no.Substring(0, no.Length - 1);
                }
            }
            no = No2Str(no);

            return no;
        }

    }
    }
